﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Core.Module.Interfaces.Model;
using Core.Module.Interfaces.Manager;
using System.Collections;

namespace Core.Module.Interfaces.Controller
{
    public interface INodeController<T>
    {
        INodeManager<T> Manager { get; set; }
        IModuleNode Get(string nodeId);
        IModuleNode Get(IModuleNode sourceNode, string sourceProperty);

        IEnumerable<IModuleNode> GetChildren(string parentId);
        IEnumerable<IModuleNode> GetChildren(string parentId, string nodeTypeName);
        IModuleNode GetChild(string parentId, string nodeTypeName);

        object GetPropertyValue(IModuleNode node, string propertyName);
        IModuleNode GetPropertyAsNode(IModuleNode node, string propertyName);
        IEnumerable<KeyValuePair<string, string>> GetProperties(IModuleNode node);
    }
}
